var __read = (this && this.__read) || function (o, n) {
    var m = typeof Symbol === "function" && o[Symbol.iterator];
    if (!m) return o;
    var i = m.call(o), r, ar = [], e;
    try {
        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
    }
    catch (error) { e = { error: error }; }
    finally {
        try {
            if (r && !r.done && (m = i["return"])) m.call(i);
        }
        finally { if (e) throw e.error; }
    }
    return ar;
};
var __spread = (this && this.__spread) || function () {
    for (var ar = [], i = 0; i < arguments.length; i++) ar = ar.concat(__read(arguments[i]));
    return ar;
};
import Taro from "@tarojs/taro";
/**
 * 校验特殊字符串
 * @param value 输入内容
 */
export var verityInputValue = function (value) {
    var pattern = /^(\w|[^\x00-\xff]|[:,-|;])*$/;
    return pattern.test(value);
};
/**
 * 判断是否是数组
 * @param value
 */
export function isArray(value) {
    if (typeof Array.isArray === "function") {
        return Array.isArray(value);
    }
    else {
        return Object.prototype.toString.call(value) === "[object Array]";
    }
}
/**
 * 路由跳转
 * @param url 页面相对路径
 * @param params 路由参数
 * @returns
 */
export function pushTo(url, params) {
    var _url = url;
    if (params) {
        var newParams = "";
        for (var k in params) {
            newParams += "&" + k + "=" + params[k];
        }
        newParams = newParams.replace(/&/, "?");
        _url = _url + newParams;
    }
    Taro.navigateTo({
        url: _url
    });
}
/**
 * 获取url路径参数
 * @param url url
 * @returns 路径参数对象
 */
export function getQueryUrl(url) {
    if (url && url.length <= 0)
        return {};
    var queryObj = {};
    var query = url.split("?")[1];
    if (query) {
        var vars = query.split("&");
        for (var i = 0; i < vars.length; i++) {
            var pair = vars[i].split("=");
            queryObj[pair[0]] = pair[1];
        }
        return queryObj;
    }
    else {
        return {};
    }
}
/**
 * 时间戳换算成时分秒
 * @param value 时间戳 单位秒
 * @returns 时分秒
 */
export function dateConvert(value) {
    var hour;
    var min;
    var sec;
    var createDate = "";
    hour = parseInt((value / 60 / 60).toString());
    min = parseInt(((value - hour * 3600) / 60).toString());
    sec = parseInt((value - (hour * 3600 + min * 60)).toString());
    if (hour > 0) {
        if (min > 0) {
            if (sec > 0) {
                createDate = hour + "时" + min + "分" + sec + "秒";
            }
            else {
                createDate = hour + "时" + min + "分";
            }
        }
        else {
            if (sec > 0) {
                createDate = hour + "时" + sec + "秒";
            }
            else {
                createDate = hour + "时";
            }
        }
    }
    else if (min > 0) {
        createDate = sec > 0 ? min + "分" + sec + "秒" : min + "分";
    }
    else if (sec > 0) {
        createDate = sec + "秒";
    }
    return createDate;
}
/**
 * 手机号中间设置为****
 * @param phoneNum 手机号
 * @returns 修改之后的手机号，例如：135****1234
 */
export function fuzzyNumber(phoneNum) {
    if (!phoneNum)
        return;
    return phoneNum.replace(/^(\d{3})\d{4}(\d+)/, "$1****$2");
}
/**
 * 是否是iPhoneX
 * @param info 设备信息
 * @returns 布尔值
 */
export function isIphoneXSeries(info) {
    var _a;
    return ((_a = info === null || info === void 0 ? void 0 : info.system) === null || _a === void 0 ? void 0 : _a.toLowerCase().includes("ios")) && info.statusBarHeight > 20;
}
/**
 * 校验手机号
 * @param phone 手机号
 */
export function verifyPhone(phone) {
    return /^1[345789]\d{9}$/.test(phone);
}
/**
 * 输入框防抖
 * @param func 实际要执行的函数
 * @param wait 延迟时间，也就是阈值，单位是毫秒（ms）
 * @param immediate 立即
 */
export var debounce = function (func, wait, immediate) {
    var timeout;
    return function () {
        var _this = this;
        var args = [];
        for (var _i = 0; _i < arguments.length; _i++) {
            args[_i] = arguments[_i];
        }
        clearTimeout(timeout);
        timeout = setTimeout(function () {
            timeout = null;
            if (!immediate)
                func.apply(_this, args);
        }, wait);
        if (immediate && !timeout)
            func.apply(this, __spread(args));
    };
};
/**
 * 节流函数
 * @param func 实际要执行的函数
 * @param delay  延迟时间，也就是阈值，单位是毫秒（ms）
 */
export var throttle = function (func, delay) {
    var ctx;
    var args;
    // 记录上次触发事件
    var previous = Date.now();
    var later = function () {
        func.apply(ctx, args);
    };
    return function () {
        ctx = this;
        args = arguments;
        var now = Date.now();
        // 本次事件触发与上一次的时间比较
        var diff = now - previous - delay;
        // 如果隔间时间超过设定时间，即再次设置事件触发的定时器
        if (diff >= 0) {
            // 更新最近事件触发的时间
            previous = now;
            setTimeout(later, delay);
        }
    };
};
/**
 * 对象浅比较
 * @param {object} a
 * @param {object} b
 * @returns
 */
export function shallowEqual(a, b) {
    if (a === b)
        return true;
    if (a === undefined || b === undefined) {
        return false;
    }
    var keysA = Object.keys(a);
    var keysB = Object.keys(b);
    if (keysA.length !== keysB.length)
        return false;
    var hasDiff = keysA.some(function (key) { return a[key] !== b[key]; });
    return !hasDiff;
}
/*
*判断文件是否是gif
* @param filePath 小程序的模板路径
* @param isMulti 是否是多选
*/
export var isGifFun = function (filePath, isMulti) {
    if (isMulti === void 0) { isMulti = false; }
    var isGif = false;
    var view = Taro.getFileSystemManager().readFileSync(filePath, "hex");
    var v = String(view)
        .slice(0, 8)
        .toUpperCase();
    if (v === "47494638") { //过滤掉格式为gif的文件
        isGif = true;
        if (!isMulti) {
            Taro.showToast({
                title: '图片格式错误，请重新选择',
                icon: 'none',
                duration: 1000
            });
        }
    }
    return isGif;
};
